package com.vc.commons.db;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

/**
 * Druid数据源的配置
 * 
 * DruidDBConfig类被@Configuration标注，用作配置信息； DataSource对象被@Bean声明，
 * 为Spring容器所管理， @Primary表示这里定义的DataSource将覆盖其他来源的DataSource。
 * jdbc.url=${jdbc.url} 最新的支持方式如下: jdbc.url=@jdbc.url@
 * 
 * @author Cris
 *
 */
@Configuration
@RefreshScope
@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DruidDataSourceConfig {

	// @Value("${spring.datasource.url}")
	private String url;

	// @Value("${spring.datasource.username}")
	private String username;

	// @Value("${spring.datasource.password}")
	private String password;

	// @Value("${spring.datasource.driverClassName}")
	private String driverClassName;

	// @Value("${spring.datasource.initialSize}")
	private int initialSize;

	// @Value("${spring.datasource.minIdle}")
	private int minIdle;

	// @Value("${spring.datasource.maxActive}")
	private int maxActive;

	// @Value("${spring.datasource.maxWait}")
	private int maxWait;

	// @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
	private int timeBetweenEvictionRunsMillis;

	// @Value("${spring.datasource.minEvictableIdleTimeMillis}")
	private int minEvictableIdleTimeMillis;

	// @Value("${spring.datasource.validationQuery}")
	private String validationQuery;

	// @Value("${spring.datasource.testWhileIdle}")
	private boolean testWhileIdle;

	// @Value("${spring.datasource.testOnBorrow}")
	private boolean testOnBorrow;

	// @Value("${spring.datasource.testOnReturn}")
	private boolean testOnReturn;

	// @Value("${spring.datasource.poolPreparedStatements}")
	private boolean poolPreparedStatements;

	// @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
	private int maxPoolPreparedStatementPerConnectionSize;

	// @Value("${spring.datasource.filters}")
	private String filters;

	// @Value("{spring.datasource.connectionProperties}")
	private String connectionProperties;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getDriverClassName() {
		return driverClassName;
	}

	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}

	public int getInitialSize() {
		return initialSize;
	}

	public void setInitialSize(int initialSize) {
		this.initialSize = initialSize;
	}

	public int getMinIdle() {
		return minIdle;
	}

	public void setMinIdle(int minIdle) {
		this.minIdle = minIdle;
	}

	public int getMaxActive() {
		return maxActive;
	}

	public void setMaxActive(int maxActive) {
		this.maxActive = maxActive;
	}

	public int getMaxWait() {
		return maxWait;
	}

	public void setMaxWait(int maxWait) {
		this.maxWait = maxWait;
	}

	public int getTimeBetweenEvictionRunsMillis() {
		return timeBetweenEvictionRunsMillis;
	}

	public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
		this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
	}

	public int getMinEvictableIdleTimeMillis() {
		return minEvictableIdleTimeMillis;
	}

	public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
		this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
	}

	public String getValidationQuery() {
		return validationQuery;
	}

	public void setValidationQuery(String validationQuery) {
		this.validationQuery = validationQuery;
	}

	public boolean isTestWhileIdle() {
		return testWhileIdle;
	}

	public void setTestWhileIdle(boolean testWhileIdle) {
		this.testWhileIdle = testWhileIdle;
	}

	public boolean isTestOnBorrow() {
		return testOnBorrow;
	}

	public void setTestOnBorrow(boolean testOnBorrow) {
		this.testOnBorrow = testOnBorrow;
	}

	public boolean isTestOnReturn() {
		return testOnReturn;
	}

	public void setTestOnReturn(boolean testOnReturn) {
		this.testOnReturn = testOnReturn;
	}

	public boolean isPoolPreparedStatements() {
		return poolPreparedStatements;
	}

	public void setPoolPreparedStatements(boolean poolPreparedStatements) {
		this.poolPreparedStatements = poolPreparedStatements;
	}

	public int getMaxPoolPreparedStatementPerConnectionSize() {
		return maxPoolPreparedStatementPerConnectionSize;
	}

	public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
		this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
	}

	public String getFilters() {
		return filters;
	}

	public void setFilters(String filters) {
		this.filters = filters;
	}

	public String getConnectionProperties() {
		return connectionProperties;
	}

	public void setConnectionProperties(String connectionProperties) {
		this.connectionProperties = connectionProperties;
	}

}
